package com.zh.rxharmony.sample.util.rx;

import io.reactivex.Observable;
import io.reactivex.functions.Function;

import java.util.concurrent.TimeUnit;

public class RxUtil {
    private RxUtil() {
    }

    /**
     * Rx倒计时
     *
     * @param startDelayTime 开始前的延时时间，例如开始前有1秒缓冲
     * @param cycle          周期，每隔多久重复执行，例如1秒执行一次的倒计时功能
     * @param time           执行多久，例如倒计时3秒，则为3
     * @param unit           时间单位，倒计时3秒，单位为秒
     */
    public static Observable<Integer> countdown(long startDelayTime, long cycle, int time, TimeUnit unit) {
        final int countTime = Math.max(time, 0);
        return Observable.interval(startDelayTime, cycle, unit)
                .map(new Function<Long, Integer>() {
                    @Override
                    public Integer apply(Long increaseTime) throws Exception {
                        return countTime - increaseTime.intValue();
                    }
                })
                //take指定到多少次就停止，这里指定到时间后就结束
                .take(countTime + 1);
    }

    /**
     * 倒计时，执行无限次
     *
     * @param cycle 周期
     * @param unit  单位
     */
    public static Observable<Long> countdown(long cycle, TimeUnit unit) {
        return Observable.interval(0, cycle, unit);
    }

    /**
     * 延时操作
     */
    public static Observable<Long> delayed(int time, TimeUnit unit) {
        return Observable.timer(time, unit);
    }
}